package com.akcome.apollo.common;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.regex.Pattern;

import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.util.NodeList;

public class HtmlUtils {
	 /**
	  * 抽取纯文本信息
	  * @param inputHtml
	  * @return
	  */
	 public static String extractText(String inputHtml) throws Exception{
	  StringBuffer text = new StringBuffer();
	  
	  Parser parser = new Parser(new String(inputHtml.getBytes(),"8859_1"));
	  //遍历所有的节点
	  NodeList nodes = parser.extractAllNodesThatMatch(new NodeFilter(){
	   public boolean accept(Node node) {
	    return true;
	   }});
	  Node node = nodes.elementAt(0);
	  text.append(new String(node.toPlainTextString().getBytes("8859_1")));
	  return text.toString();
	 }
	 
	//从html中提取纯文本  
	    public static String Html2Text(String inputString) {  
	        String htmlStr = inputString; // 含html标签的字符串  
	        String textStr = "";  
	        java.util.regex.Pattern p_script;  
	        java.util.regex.Matcher m_script;  
	        java.util.regex.Pattern p_style;  
	        java.util.regex.Matcher m_style;  
	        java.util.regex.Pattern p_html;  
	        java.util.regex.Matcher m_html;  
	        try {  
	            String regEx_script = "<[\\s]*?script[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?script[\\s]*?>"; // 定义script的正则表达式{或<script[^>]*?>[\\s\\S]*?<\\/script>  
	            String regEx_style = "<[\\s]*?style[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?style[\\s]*?>"; // 定义style的正则表达式{或<style[^>]*?>[\\s\\S]*?<\\/style>  
	            String regEx_html = "[a-zA-Z]";//"<[^>]+>"; // 定义HTML标签的正则表达式  
	            String regEx_html1 = "[0-9]";
	            p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE);  
	            m_script = p_script.matcher(htmlStr);  
	            htmlStr = m_script.replaceAll(""); // 过滤script标签  
	            p_style = Pattern.compile(regEx_style, Pattern.CASE_INSENSITIVE);  
	            m_style = p_style.matcher(htmlStr);  
	            htmlStr = m_style.replaceAll(""); // 过滤style标签  
	            p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE);  
	            m_html = p_html.matcher(htmlStr);  
	            htmlStr = m_html.replaceAll(""); // 过滤html标签  
	            htmlStr = Pattern.compile(regEx_html1, Pattern.CASE_INSENSITIVE).matcher(htmlStr).replaceAll("");
	            htmlStr = htmlStr.replaceAll("=","");
	            htmlStr = htmlStr.replaceAll("\\.","");
	            htmlStr = htmlStr.replaceAll("/","");
	            htmlStr = htmlStr.replaceAll("\"","");
	            htmlStr = htmlStr.replaceAll("-","");
	            htmlStr = htmlStr.replaceAll("\\{","");
	            htmlStr = htmlStr.replaceAll("\\}","");
	            htmlStr = htmlStr.replaceAll("\\#","");
	            htmlStr = htmlStr.replaceAll("\\@","");
	            htmlStr = htmlStr.replaceAll("\\?","");
	            htmlStr = htmlStr.replaceAll("\\:","");
	            htmlStr = htmlStr.replaceAll("\\;","");
	            htmlStr = htmlStr.replaceAll("_","");
	            htmlStr = htmlStr.replaceAll("\\$","");
	            htmlStr = htmlStr.replaceAll("\\'","");
	            htmlStr = htmlStr.replaceAll("\\&","");
	            htmlStr = htmlStr.replaceAll("\\!","");
	            htmlStr = htmlStr.replaceAll("\\(","");
	            htmlStr = htmlStr.replaceAll("\\)","");
	            htmlStr = htmlStr.replaceAll("\\,","");
	            htmlStr = htmlStr.replaceAll("\\[","");
	            htmlStr = htmlStr.replaceAll("\\]","");
	            htmlStr = htmlStr.replaceAll("\\%","");
	            htmlStr = htmlStr.replaceAll("\\+","");
	            htmlStr = htmlStr.replaceAll("\t","");
	            htmlStr = htmlStr.replaceAll(" ","");
	            htmlStr = htmlStr.replaceAll("\\<","\n");
	            htmlStr = htmlStr.replaceAll("\\>","\n");
	            
	            textStr = htmlStr.trim();  
	        } catch (Exception e) {System.err.println("Html2Text: " + e.getMessage()); }  
	        //剔除空格行  
	        textStr=textStr.replaceAll("[ ]+", " ");  
	        textStr=textStr.replaceAll("(?m)^\\s*$(\\n|\\r\\n)", "");  
	        return textStr;// 返回文本字符串  
	    }  
	    public static String txt2String(File file){
	        StringBuilder result = new StringBuilder();
	        try{
	            BufferedReader br = new BufferedReader(new FileReader(file));//构造一个BufferedReader类来读取文件
	            String s = null;
	            while((s = br.readLine())!=null){//使用readLine方法，一次读一行
	                result.append(System.lineSeparator()+s);
	            }
	            br.close();    
	        }catch(Exception e){
	            e.printStackTrace();
	        }
	        return result.toString();
	    }
	    
	 public static void main(String[] args) throws Exception{
		 File file = new File("D:/workspace/pool/apollo/src/main/resources/templates");
		 File[] files = file.listFiles();
		 for (File file2 : files) {
			 String text1 = Html2Text(txt2String(file2));
			 System.out.println(text1);
		}
		 
	 }
	}